home *** CD-ROM | disk | FTP | other *** search
/ Carousel Volume 2 #1 / carousel.iso / mactosh / hc / tex05.sit / TEX by ^z — v. 0.5 / card_2822.txt < prev    next >
Text File  |  1988-09-04  |  50KB  |  724 lines

  1. -- card: 2822 from stack: in.5
  2. -- bmap block id: 2478
  3. -- flags: 4000
  4. -- background id: 2153
  5. -- name: TEXIntroCard
  6.  
  7.  
  8. -- part 67 (button)
  9. -- low flags: 00
  10. -- high flags: A003
  11. -- rect: left=401 top=215 right=237 bottom=510
  12. -- title width / last selected line: 0
  13. -- icon id / first selected line: 0 / 0
  14. -- text alignment: 65535
  15. -- font id: 3
  16. -- text size: 10
  17. -- style flags: 0
  18. -- line height: 13
  19. -- part name: Append Files
  20. ----- HyperTalk script -----
  21. on mouseUp
  22.   answer "Select a base file, then others to append to it."
  23.   answer "Choose 'Cancel' when finished appending."
  24.   get appendDeleteFiles ("APPEND")
  25.   if It is not empty then answer It
  26. end mouseUp
  27.  
  28.  
  29.  
  30. -- part 70 (button)
  31. -- low flags: 00
  32. -- high flags: A003
  33. -- rect: left=401 top=189 right=211 bottom=510
  34. -- title width / last selected line: 0
  35. -- icon id / first selected line: 0 / 0
  36. -- text alignment: 65535
  37. -- font id: 3
  38. -- text size: 10
  39. -- style flags: 0
  40. -- line height: 13
  41. -- part name: Build Index
  42. ----- HyperTalk script -----
  43. on mouseUp
  44.   answer "Must close any open dataspaces first..." with "Cancel" or "OK"
  45.   if It is "Cancel" then exit mouseUp
  46.   closeAnyOpenDataspaces
  47.   get indexTEXfile()
  48.   if char 1 of It is "{" then answer It
  49. end mouseUp
  50.  
  51.  
  52.  
  53. -- part 75 (button)
  54. -- low flags: 00
  55. -- high flags: A003
  56. -- rect: left=401 top=241 right=263 bottom=510
  57. -- title width / last selected line: 0
  58. -- icon id / first selected line: 0 / 0
  59. -- text alignment: 65535
  60. -- font id: 3
  61. -- text size: 10
  62. -- style flags: 0
  63. -- line height: 13
  64. -- part name: Delete Files
  65. ----- HyperTalk script -----
  66. on mouseUp
  67.   answer "Select files to be deleted -- beware!"
  68.   get appendDeleteFiles ("DELETE")
  69.   if It is not empty then answer It
  70. end mouseUp
  71.  
  72.  
  73.  
  74. -- part 96 (button)
  75. -- low flags: 00
  76. -- high flags: 0000
  77. -- rect: left=476 top=313 right=342 bottom=512
  78. -- title width / last selected line: 0
  79. -- icon id / first selected line: 1011 / 1011
  80. -- text alignment: 1
  81. -- font id: 0
  82. -- text size: 12
  83. -- style flags: 0
  84. -- line height: 16
  85. -- part name: Home
  86. ----- HyperTalk script -----
  87. on mouseUp
  88.   go home
  89. end mouseUp
  90.  
  91.  
  92.  
  93. -- part 97 (field)
  94. -- low flags: 01
  95. -- high flags: 0001
  96. -- rect: left=29 top=167 right=181 bottom=279
  97. -- title width / last selected line: 0
  98. -- icon id / first selected line: 0 / 0
  99. -- text alignment: 1
  100. -- font id: 3
  101. -- text size: 9
  102. -- style flags: 16384
  103. -- line height: 12
  104. -- part name: versionField
  105.  
  106.  
  107. -- part 100 (button)
  108. -- low flags: 00
  109. -- high flags: A003
  110. -- rect: left=401 top=267 right=289 bottom=510
  111. -- title width / last selected line: 0
  112. -- icon id / first selected line: 0 / 0
  113. -- text alignment: 65535
  114. -- font id: 3
  115. -- text size: 10
  116. -- style flags: 0
  117. -- line height: 13
  118. -- part name: Open Dataspace
  119. ----- HyperTalk script -----
  120. on mouseUp
  121.   send mouseUp to button "Browse Dataspace"
  122.   send mouseUp to background button "Open Dataspace"
  123. end mouseUp
  124.  
  125.  
  126.  
  127. -- part 101 (button)
  128. -- low flags: 00
  129. -- high flags: 0000
  130. -- rect: left=382 top=300 right=342 bottom=424
  131. -- title width / last selected line: 0
  132. -- icon id / first selected line: 0 / 0
  133. -- text alignment: 65535
  134. -- font id: 3
  135. -- text size: 10
  136. -- style flags: 0
  137. -- line height: 13
  138. -- part name: Browse Dataspace
  139. ----- HyperTalk script -----
  140. on mouseUp
  141.   visual effect iris open to black
  142.   visual effect iris open
  143.   go to next card
  144. end mouseUp
  145.  
  146.  
  147.  
  148. -- part 102 (button)
  149. -- low flags: 00
  150. -- high flags: A003
  151. -- rect: left=401 top=41 right=63 bottom=510
  152. -- title width / last selected line: 0
  153. -- icon id / first selected line: 0 / 0
  154. -- text alignment: 65535
  155. -- font id: 3
  156. -- text size: 10
  157. -- style flags: 0
  158. -- line height: 13
  159. -- part name: Introduction
  160. ----- HyperTalk script -----
  161. on mouseUp
  162.   if the visible of card field introField is true then
  163.     hide card field introField
  164.   else
  165.     show card field introField
  166.   end if
  167. end mouseUp
  168.  
  169.  
  170.  
  171. -- part 108 (field)
  172. -- low flags: 01
  173. -- high flags: 0001
  174. -- rect: left=29 top=193 right=207 bottom=279
  175. -- title width / last selected line: 0
  176. -- icon id / first selected line: 0 / 0
  177. -- text alignment: 1
  178. -- font id: 3
  179. -- text size: 9
  180. -- style flags: 16384
  181. -- line height: 12
  182. -- part name: andReasField
  183.  
  184.  
  185. -- part 103 (field)
  186. -- low flags: 81
  187. -- high flags: 0004
  188. -- rect: left=6 top=19 right=341 bottom=390
  189. -- title width / last selected line: 0
  190. -- icon id / first selected line: 0 / 0
  191. -- text alignment: 0
  192. -- font id: 2
  193. -- text size: 12
  194. -- style flags: 0
  195. -- line height: 16
  196. -- part name: introField
  197. ----- HyperTalk script -----
  198. on mouseUp
  199.   hide card field introField
  200. end mouseUp
  201.  
  202.  
  203.  
  204. -- part 104 (button)
  205. -- low flags: 00
  206. -- high flags: A003
  207. -- rect: left=401 top=69 right=91 bottom=510
  208. -- title width / last selected line: 0
  209. -- icon id / first selected line: 0 / 0
  210. -- text alignment: 65535
  211. -- font id: 3
  212. -- text size: 10
  213. -- style flags: 0
  214. -- line height: 13
  215. -- part name: Help
  216. ----- HyperTalk script -----
  217. on mouseUp
  218.   if the visible of card field helpField is true then
  219.     hide card field helpField
  220.   else
  221.     show card field helpField
  222.   end if
  223. end mouseUp
  224.  
  225.  
  226.  
  227. -- part 106 (button)
  228. -- low flags: 00
  229. -- high flags: A003
  230. -- rect: left=401 top=97 right=119 bottom=510
  231. -- title width / last selected line: 0
  232. -- icon id / first selected line: 0 / 0
  233. -- text alignment: 65535
  234. -- font id: 3
  235. -- text size: 10
  236. -- style flags: 0
  237. -- line height: 13
  238. -- part name: Author's Remarks
  239. ----- HyperTalk script -----
  240. on mouseUp
  241.   if the visible of card field authorField is true then
  242.     hide card field authorField
  243.   else
  244.     show card field authorField
  245.   end if
  246. end mouseUp
  247.  
  248.  
  249.  
  250. -- part 109 (button)
  251. -- low flags: 00
  252. -- high flags: A003
  253. -- rect: left=401 top=125 right=147 bottom=510
  254. -- title width / last selected line: 0
  255. -- icon id / first selected line: 0 / 0
  256. -- text alignment: 65535
  257. -- font id: 3
  258. -- text size: 10
  259. -- style flags: 0
  260. -- line height: 13
  261. -- part name: Technical Notes
  262. ----- HyperTalk script -----
  263. on mouseUp
  264.   if the visible of card field techField is true then
  265.     hide card field techField
  266.   else
  267.     show card field techField
  268.   end if
  269. end mouseUp
  270.  
  271.  
  272.  
  273. -- part 105 (field)
  274. -- low flags: 81
  275. -- high flags: 2007
  276. -- rect: left=3 top=19 right=340 bottom=462
  277. -- title width / last selected line: 0
  278. -- icon id / first selected line: 0 / 0
  279. -- text alignment: 0
  280. -- font id: 2
  281. -- text size: 12
  282. -- style flags: 0
  283. -- line height: 16
  284. -- part name: helpField
  285. ----- HyperTalk script -----
  286. on mouseUp
  287.   hide card field helpField
  288. end mouseUp
  289.  
  290.  
  291.  
  292. -- part 110 (field)
  293. -- low flags: 81
  294. -- high flags: 2007
  295. -- rect: left=3 top=19 right=340 bottom=497
  296. -- title width / last selected line: 0
  297. -- icon id / first selected line: 0 / 0
  298. -- text alignment: 0
  299. -- font id: 4
  300. -- text size: 9
  301. -- style flags: 0
  302. -- line height: 12
  303. -- part name: techField
  304. ----- HyperTalk script -----
  305. on mouseUp
  306.   hide card field techfield
  307. end mouseUp
  308.  
  309.  
  310.  
  311. -- part 107 (field)
  312. -- low flags: 81
  313. -- high flags: 2004
  314. -- rect: left=1 top=21 right=341 bottom=512
  315. -- title width / last selected line: 0
  316. -- icon id / first selected line: 0 / 0
  317. -- text alignment: 0
  318. -- font id: 3
  319. -- text size: 9
  320. -- style flags: 0
  321. -- line height: 12
  322. -- part name: authorfield
  323. ----- HyperTalk script -----
  324. on mouseUp
  325.   hide card field "authorField"
  326. end mouseUp
  327.  
  328.  
  329.  
  330. -- part contents for card part 97
  331. ----- text -----
  332. version 0.5 - by Mark ^Zimmermann
  333.  
  334. -- part contents for card part 103
  335. ----- text -----
  336.          Welcome to TEX! ΓÇö version 0.5  ΓÇö 19880904
  337.        ┬⌐1988 Mark ^Zimmermann ΓÇö all rights reserved
  338. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö
  339. To get started using TEX quickly:
  340.   ΓÇó find or make a TEXT file ΓÇö the bigger the better!*
  341.   ΓÇó click the "Build Index" button to index it...
  342.   ΓÇó click the "Open Dataspace" button and select your text file to see two windows into its index...
  343.   ΓÇó scroll around and click on a word in the index window to see a key-word-in-context display for that word...
  344.   ΓÇó scroll around in the context display and click on a line to jump into the full text of your file at that location...
  345.   ΓÇó experiment with the buttons to move around in your dataspace, browsing and gathering information...
  346.   ΓÇó read the Help text to learn about advanced techniques such as subspace navigation and multi-dataspace browsing...
  347.   ΓÇó mail in license fee & repeat steps above!
  348. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö
  349. *You must have enough free disk space to build the index; about twice the size of the original file is usually ample.
  350.  
  351.  
  352. -- part contents for card part 105
  353. ----- text -----
  354.                 Welcome to TEX! ΓÇö version 0.5 ΓÇö 19880904
  355.          Copyright ┬⌐1988 Mark ^Zimmermann ΓÇö all rights reserved
  356.                     (see below for license fee information)
  357. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöHelp is organized as follows:
  358.   ΓÇó ABOUT THIS STACK
  359.   ΓÇó BACKGROUND
  360.       - License fees and distribution
  361.       - History & Acknowlegements
  362.   ΓÇó HOW TO USE TEX
  363.       - Building an Index
  364.       - Elementary Browsing
  365.       - Advanced Techniques & Concepts
  366.   ΓÇó IN CASE OF TROUBLE
  367.   ΓÇó SOME TECHNICAL NOTES
  368.   ΓÇó FINAL REMARKS
  369. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö     (Help is a single, simple text field, so you if you wish you may print it out for reading and reference at your leisure.)
  370.  
  371.      Standard Legalistic Disclaimer:  I have never lost any data using TEX or its related programs, but prudence dictates that you should always back up your files and work with copies.  I cannot be responsible for ill effects that follow, directly or indirectly, from the use of my software.  There are no guarantees in life.  All other disclaimers are included herewith by reference.  Use TEX at your own risk!
  372.  
  373.  
  374. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöABOUT THIS STACKΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö
  375.  
  376.      I want omniscience.  Until then, I build tools for people to use on massive collections of free-text information.  TEX is the latest of those tools.  All conventional database systems (that I know of)  fall short in one or more ways:
  377.   ΓÇó they require ΓÇ£cleanΓÇ¥ input data, in highly structured formats;
  378.   ΓÇó they break down if applied to files larger than a few megabytes;
  379.   ΓÇó they are intolerably slow in answering simple queries;
  380.   ΓÇó they do not allow easy, interactive free-association and browsing;
  381.   ΓÇó they are not integrated with writing or programming tools;
  382.   ΓÇó they demand too much work to get data into the system;
  383.   ΓÇó they lack a user interface fit for an intelligent being;
  384.   ΓÇó they cost too much, or only run on expensive/exotic hardware.
  385.  
  386.      Real life is not clean!  Data doesn't arrive in neat little zones and fields pre-marked with delimiters ΓÇö it comes as an overwhelming flood of information from diverse sources.  TEX lets you handle that kind of textual data.  You can take technical manuals, religious texts, archives of downloaded information, school notes, or any other files that you may have, as long as the files contain ΓÇ£wordsΓÇ¥ which are separated by spaces or punctuation.
  387.  
  388.      I call a big file of free text a ΓÇ£DataspaceΓÇ¥.  TEX takes a dataspace and builds machine-readable indices to every word.  Then, TEX lets you browse that dataspace, move around in it, gather pieces of information together, and discover new things that were hidden by the masses of text ΓÇö gems or nuggets of valuable data.  The computer does what it does best:  meticulous organization of information and rapid execution of instructions.  You do what you do best:  thinking, pattern-recognition, intuition.  Symbiosis/synergy!
  389.  
  390.  
  391.  
  392. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöBACKGROUNDΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö
  393.  
  394.         ---------------License Fees & Distribution---------------
  395.  
  396.      Please see my short essay (click the button "Author's Remarks") for my views on the morality of overpriced software.  In order to continue developing TEX, I need your help!
  397.  
  398.  **********************************************************************
  399.      Please redistribute this stack freely, keeping my words intact!  Individual (or family) users of TEX should send a $10 license fee to me at the below address. The corporate license fee is $40 per copy in simultaneous use (reduced to $10/copy for nonprofit or educational users).  If you sell this stack or use its XFCNs in a commercial product, send 2% of the retail list price per copy sold.
  400.  **********************************************************************
  401.     Send payments to:
  402.              Mark ^Zimmermann
  403.              9511 Gwyndale Drive
  404.              Silver Spring, MD  20910
  405.              USA
  406.  
  407.   telephone:       301-565-2166
  408.   CompuServe:   [75066,2044]
  409.   arpanet:          science@NEMS.ARPA
  410.  
  411.      In exchange for your lifetime license fee, you get:
  412.      - aperiodic information about enhancements and extensions;
  413.      - free support and advice on the use of TEX;
  414.      - copies of new versions for a nominal charge ($5+SASE+disk);
  415.      - a nice warm feeling knowing that you are supporting further research into massive free-text dataspace tool-building.
  416.  
  417.       Be a part of the adventure!  In addition to sending in your license fee, please take the time to write me a letter about how you're using TEX, or send a disk with your ideas, suggestions, or modifications to the stack.
  418.  
  419.      All monies received are used to enhance this software and to pay for creation and distribution expenses.  Comparable "commercial" free-text database products cost hundreds or thousands of dollars.  You have something precious here ΓÇö take advantage of it, please!  Build upon my work, extend it, and share your results with the community of amateurs and scholars.
  420.  
  421.      I am very proud of this software.  I have chosen to distribute it at an extremely low cost, so that it can be more widely used and can help more people.  Please join me!
  422.  
  423.      As mentioned above, if you wish to use the external functions from TEX in a commercial product, the current license fee is 2% of the retail list price per copy distributed.  Contact me for details, please.  (That's a couple of orders of magnitude less than competing indexing products, I might add.)  If you prefer to take the public-domain XFCNs from TEXAS and work from those, then no royalties or licensing fees apply, of course.
  424.  
  425.      I do not want to be in the business of copying and mailing disks ΓÇö it takes far too much time away from programming!  All of the programs mentioned here have been widely posted in public fora and are being distributed by major users groups (such as BMUG in Berkeley).  But if you absolutely cannot find the current version of TEX or any of the other programs, you may (sigh) contact me.  Send $15, along with a self-addressed stamped envelope and a formatted 800kB Macintosh disk, to the above address.  I'll send you the latest versions of TEX, TEXAS, MultIndexer, qndxr.c, brwsr.c, and the source code in C to them (or as much as will fit on one disk, anyway).  The $15 disk copying fee includes the $10 individual/family license fee for TEX, so if you've already registered and paid your $10, you may deduct that amount; if you're requesting a disk on behalf of a for-profit commercial enterprise you should add another $30 for the first-copy corporate license fee.
  426.  
  427.      I'm sorry, but I cannot promise to respond to correspondence which does not include a self-addressed stamped envelope for my reply.  (The only exceptions are letters with foreign postmarks, written in sincere but broken English.)
  428.  
  429.  
  430.           ------------History & Acknowlegements------------
  431.  
  432.      TEX is a conceptual descendent of TEXAS, an indexer/browser system which I developed in 1987.  TEXAS is a free, public-domain HyperCard stack, available on many public bulletin boards and computer networks.  In turn, TEXAS itself is a descendent of earlier free-text browser programs which I wrote in MacForth during 1985-1986.  During the summer of 1988 I took the publically-available source code of TEXAS and completely rewrote and restructured it.  The result is the stack you now have ΓÇö TEX.
  433.  
  434.      For help with the development of TEX, I thank many people:
  435.   ΓÇó my wife, Paulette Dickerson, and my children, Merle, Gray, and Robin;
  436.   ΓÇó Andreas Vichr, who did most of the graphics and design work (if you want to find his monument, look around you!);
  437.   ΓÇó my teachers (formal and informal) over the years;
  438.   ΓÇó the developers of the Apple Macintosh, of HyperCard, of MacForth, and of Think's Lightspeed C;
  439.   ΓÇó the enthusiastic users of earlier dataspace browsing programs ΓÇö especially Andy Jewell, Sam Thornton, Joe Golton, and many others whose names I have misplaced (I'm only sorry that I haven't been able to incorporate more of your suggestions yet!) ΓÇö and those who made voluntary contributions to encourage further development;
  440.   ΓÇó Vernor Vinge (author of TRUE NAMES), and other science-fiction writers who have thought about future human-machine interactions;
  441.   ΓÇó the scholars, researchers, and amateurs of the world, who have chosen to share their discoveries rather than attempt to achieve short-term profit by them.  (Again, see my essay under "Author's Remarks".)
  442.                
  443.  
  444.  
  445. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöHOW TO USE TEXΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö
  446.  
  447.                        --------Building a Dataspace --------
  448.  
  449.      Before you can use TEX to navigate through a dataspace, you have to build that dataspace from your original text file.  Index-building is a very simple process:  just click the ΓÇ£Build IndexΓÇ¥ button on the TEX ΓÇ£MenuΓÇ¥ card, select the text file to index from the standard Macintosh files dialog, and then sit back and relax!  There is no need to reformat or pre-process your information, no need to arrange items into rows or columns, fields or zones, and no need to read through the text adding links or pointers by hand.  The computer does the work, not you.
  450.  
  451.      Every word processor has the ability to save files as standard ASCII text (sometimes called ΓÇ£Text OnlyΓÇ¥).  For speed and simplicity, TEX does not work with special or proprietary file formats.  For your convenience, the Menu card of TEX provides buttons to join text files together (ΓÇ£Append FilesΓÇ¥), and to erase files of any type (ΓÇ£Delete FilesΓÇ¥).  You may wish to use them to build up large dataspaces and to remove obsolete files.
  452.  
  453.      Indexing is an investment ΓÇö it costs a little time and disk space, but you get in exchange the ability to browse and correlate information throughout your dataspace in real time.  Specifically, a TEX index consists of two files:  one file of ΓÇ£keysΓÇ¥ (which are the distinct words and their occurrence counts in your dataspace), and the other file of ΓÇ£pointersΓÇ¥ (which indicate where to find every instance of every word).  The index files have the same name as your original text file but with ΓÇ£.kΓÇ¥ or ΓÇ£.pΓÇ¥ appended.  They must be kept in the same folder on the Macintosh desktop as your text file, so that TEX can find and use them.
  454.  
  455.      TEX index-building is *fast*!  On a standard Macintosh Plus with a slow hard disk drive, I typically find that indexing proceeds at about 3 megabytes/hour.  On a Mac II, I've measured speeds of 12-16 MB/h.  In one experiment, on a Sun Workstation (using a TEX-compatible indexing program), I got over 50 MB/h.  Of course, your mileage may vary....
  456.  
  457.      The TEX index files are optimized for speed in building, browsing and retrieving, but they are fairly space-efficient too.  Every distinct word in your input text file requires 32 bytes in the TEX keys file, and each occurrence of a word uses four bytes in the TEX pointers file.  Thus, for small files where there are many different words, the .k and .p files often add up to 150% or so of the size of the text file.  But as files get larger, efficiency increases since there are fewer new words showing up per megabyte.  In my experience, for files in the 5-50 MB range, the index structures add about 80% overhead to the original text file.  That's pretty good compared to many other database systems.
  458.  
  459.      During TEX index-building, you need to have room on your disk for a couple of extra copies of your original text file.  That space is used to hold temporary/partial index files which are automatically erased when indexing is finished.  If you try to build an index without having enough free space on your disk to hold the temporary files, you are likely to have a severe system crash!  (You shouldn't lose any data, however ΓÇö see the section IN CASE OF TROUBLE for information on how to recover.)
  460.  
  461.      Also during indexing, you need to be sure that you do not have any pre-existing files around with names the same as your dataspace file plus ΓÇ£.kΓÇ¥ or ΓÇ£.pΓÇ¥ at the end.  If you have such files, the TEX indexer will not be able to name its final index files properly.
  462.  
  463.      TEX was designed for large files ΓÇö in anticipation of optical storage and cheaper big hard disks in the near future.  Its current upper limit is set by the use of four-byte pointers, which restricts a dataspace to a few thousand megabytes.  But that limit can be lifted by a bit of reprogramming when the need arises in a few years.
  464.  
  465.      There are several ways to create an index.  First, you can click the ΓÇ£Build IndexΓÇ¥ button in the TEX stack itself, as discussed above.  Alternatively, you can run a generic indexer such as my ΓÇ£qndxr.cΓÇ¥ stand-alone application.  It indexes somewhat faster than TEX does, since without HyperCard in memory there is more space for text buffers and pointer arrays.  The qndxr.c program also provides some additional options, such as the ability to retain embedded punctuation in an index (so that words like ΓÇ£qndxr.cΓÇ¥ are indexed as a single entry, instead of as ΓÇ£qndxrΓÇ¥ and ΓÇ£cΓÇ¥ separately).  Variants of qndxr.c run on Suns, VAXen, etc., if you have access to one of them and can pass files back and forth easily.  On the other hand, qndxr.c is a traditional command-line oriented program without a civilized user interface, and has various other limitations that make it unpleasant to use at times.
  466.  
  467.      A third approach is to build an index in background under MultiFinder on the Macintosh.  My program ΓÇ£MultIndexerΓÇ¥ lets you do just that.  It has the un├ªsthetic command-line UNIX-like interface that qndxr.c suffers from, but once you get it running, you can jump into another memory partition and keep working while the indexing proceeds for you.  MultIndexer is usually a bit slower than the other index-building programs, since it doesn't get as much processor time in background and has to work in a smaller memory space.  (MultIndexer can run in as little as 160 kB.) If you need to do something else while a large file is being indexed, MultIndexer may be the solution.
  468.  
  469.      Both qndxr.c and MultIndexer are free, public-domain programs; I include them and their source code (in C) on my standard TEX software disk.  As mentioned elsewhere, send $15 along with a self-addressed stamped envelope and a formatted 800kB Mac disk to get them.  They have been posted on many public bulletin boards and networks also, so you may want to check the archives there.  As of today, the current version of qndxr.c is 0.4, and of MultIndexer is 0.41.  I plan no further enhancements of either of them.
  470.  
  471.            -------------Elementary Browsing--------------
  472.  
  473.      The TEX user interface consists of a very intuitive, ΓÇ£what you see is what you getΓÇ¥ set of windows into various views of a dataspace.  There are three levels of dataspace browsing:  Index, Context, and Text.  In a loose way, the three levels are analogous to one-dimensional, two-dimensional, and three-dimensional geometric spaces.
  474.  
  475.      Begin with the Index display.  (If you are running TEX, open a dataspace now and you'll immediately see the Index windows; if you've been browsing around, just click on the 'Index' button to return there.)  The TEX Index view gives you two independently-scrolling windows into an alphabetized list of words ΓÇö every word in your dataspace, each with a count of how many times it appears.  For instance, my index of the King James translation of the Bible begins with:  
  476.  8277 A
  477.    335 AARON
  478.        1 ABADDON
  479. (The word ΓÇ£AΓÇ¥ appears 8,277 times, ΓÇ£ABADDONΓÇ¥ only once, etc.)
  480.  
  481.      Scroll around in the Index windows and see the words and their occurrence counts for your dataspace.  (The things which look like scroll bars are actually buttons, but they work as your intuition suggests they should.)  Click on the ^Z thumb tab (elevator) button and type in a target word in order to jump long distances in the index.
  482.  
  483.      When you find a word that seems interesting, just click on the word itself in the Index window.  TEX immediately goes to the disk and assembles for you a ΓÇ£key-word-in-contextΓÇ¥ display, which I call the Context view.  It consists of the actual occurrences of your word, centered in a window, with half a line of context on each side.  Thus, for example, if we clicked on the word ΓÇ£ABARIMΓÇ¥ in the index view, we get:
  484.   into this  mount Abarim, and see the land which I have given u
  485.   he mountains of Abarim, before Nebo. NUMBERS 33:48  And th 
  486.   he mountains of Abarim, and  pitched in the plains of Moab by
  487.   to this mountain Abarim, {unto} mount  Nebo, which {is} in the
  488. (It looks better with a monospaced font like Monaco, as in the actual Context window.)  The four instances of ΓÇ£ABARIMΓÇ¥ are lined up, and we can see enough characters on either side to recognize if further browsing is worthwhile.
  489.  
  490.      The Context view has ΓÇ£scroll barsΓÇ¥ like the Index windows had, so you can scroll around freely to see all the occurrences of any of the words in your dataspace.  As for the Index view, the ^Z button lets you jump greater distances than are convenient to scroll.  If at any time you want to go back to the Index view, just click the Index button at the bottom right of the screen.
  491.  
  492.      When you locate a promising entry in the Context view, simply click anywhere on that line.  TEX fetches the actual text of your dataspace file surrounding that entry and puts it into a standard text field, so you can scroll around and read it, copy out sections for your notes, etc.  TEX uses the standard HyperCard "Find" command to locate and put a box around the text you've requested.  If, while scrolling around in the Text view, you find that you want to see more information from above or below the extracted selection of text, click a button (ΓÇ£Move Up in TextΓÇ¥ or ΓÇ£Move Down in TextΓÇ¥) to retrieve it.
  493.  
  494.      If you see a word in the Text window that looks promising for further research, highlight it with the mouse and click on the ΓÇ£Find SelectionΓÇ¥ button.  TEX will locate your word in the Index view and automatically return you there.  This makes it possible to do rapid, interactive browsing and creative discovery with a minimum of typing.
  495.  
  496.      For your convenience in taking notes on what you read, TEX provides a ΓÇ£NotesΓÇ¥ button which takes you to a card with a scrolling text field.  You may want to accumulate clippings from the text view there, write comments on what you've read, etc.
  497.  
  498.      When you are finished using TEX and leave the stack, you will be asked ΓÇ£Close any open dataspace(s)?ΓÇ¥.  For now, always answer the default, ΓÇ£YesΓÇ¥; exceptions will be discussed in the next section.
  499.  
  500.      That completes the survey of ΓÇ£elementaryΓÇ¥ browsing techniques that TEX supports.  The earlier public-domain system, TEXAS, had all of those capabilities, though not as nicely implemented in some cases.  If that were all that TEX had to offer, it would be nice but not a significant step forward.
  501.  
  502.  
  503.       -----------Advanced Techniques & Concepts------------
  504.  
  505.      The simple Index/Context/Text views and retrieval tools discussed above are sufficient for many purposes.  But when you have a very large dataspace, or more than one  large dataspace to work with, you may want to apply some more advanced techniques.  TEX provides several, and also gives you the opportunity to develop and customize the standard TEX stack to meet your specific needs.
  506.  
  507. ΓÇóSubspace browsing:
  508.  
  509.      The first and most important new feature of TEX is the ΓÇ£SubspaceΓÇ¥ button.  If you're browsing in a dataspace, click Subspace now.  You'll return to the Index view, and will see the display of word counts change.  You've gone into a subspace of the whole dataspace, and now the count information tells you how many occurrences of each word are in your subspace.
  510.  
  511.      Subspace browsing is a bit like proximity searching in a more conventional database program ΓÇö but it's far more convenient and intuitive to use.  You define a subspace by clicking on the count columns in an Index window.  For a simple example, suppose you want to look for data about Apple Computer.  But the words ΓÇ£APPLEΓÇ¥ and ΓÇ£COMPUTERΓÇ¥ occur too many times in your dataspace to conveniently browse in the usual Context view.
  512.  
  513.      So, you go into a subspace by clicking the Subspace button.  You scroll or jump to the word ΓÇ£APPLEΓÇ¥ and click on the count column; it shows ~0% before you click, and ~100% afterwards.  Now when you scroll to the word ΓÇ£COMPUTERΓÇ¥, you'll see that only some fraction, perhaps ~3%, of the occurrences of ΓÇ£COMPUTERΓÇ¥ were in the neighborhood of ΓÇ£APPLEΓÇ¥.  Click on the word ΓÇ£COMPUTERΓÇ¥ itself (not the count column) to see those instances of ΓÇ£COMPUTERΓÇ¥ that are in your subspace.
  514.  
  515.      When you're using a subspace, the word count information is shown exactly for words that don't occur too many times.  For instance, ΓÇ£23/92 FNORDΓÇ¥ means that 23 out of a total of 92 instances of the word ΓÇ£FNORDΓÇ¥ are in your subspace.  Words that occur more often than a chosen threshhold are shown as an approximate percentage, as in the above example with ΓÇ£COMPUTERΓÇ¥.
  516.  
  517.      Subspace browsing can be much more sophisticated than than our first simple example showed.  You can add or subtract the neighborhoods of words in various orders, so that your subspace holds a complex combination of terms.  For instance, it's easy with a few clicks to define a subspace consisting of the words in the neighborhoods of  ΓÇ£HYPERCARDΓÇ¥, ΓÇ£HYPERTALKΓÇ¥, or ΓÇ£STACKΓÇ¥ but not in the vicinity of ΓÇ£XFCNΓÇ¥ or ΓÇ£XCMDΓÇ¥.
  518.  
  519.      The mechanics of subspace definition are straightforward and become intuitive in a short time.  When you click on the Subspace button, if you don't have a currently-active subspace then a new, empty one is created for you; if you have a subspace, it is discarded and you're back in the full dataspace.
  520.  
  521.      Once you're using a subspace, every click on the count column of an Index window adds or subtracts a word from the subspace.  If you click on a count that is zero, then that word's neighborhood is added to the subspace and the count goes up to 100% (or N/N).  If you click on a word that has a nonzero count, then that word's neighborhood is subtracted from the dataspace and its count goes to zero.
  522.  
  523.      If you want to change the definition of a word's neighborhood, just click on one of the radio buttons marked ΓÇ£WordsΓÇ¥, ΓÇ£SentencesΓÇ¥, or ΓÇ£ParagraphsΓÇ¥, which appear when a subspace is active.  If ΓÇ£WordsΓÇ¥ is selected, clicking on a count adds a neighborhood of a few words on each side of that item to the subspace; ΓÇ£SentencesΓÇ¥ broadens the definition of a neighborhood to be a few sentences on each side of the chosen term; and ΓÇ£ParagraphsΓÇ¥ does what it implies and further enlarges the neighborhood.
  524.  
  525.      Once you've defined a subspace by clicking on the count column of the Index windows, a click on a word takes you to the Context view ΓÇö but with a difference.  This time, only those words that are members of your subspace are shown on a line with contextual information around them.  If you've defined a sparsely-populated subspace, there may be lines in the Context view of dots, ΓÇ£...........ΓÇ¥, showing places where 100 words were skipped without finding one that fell within your subspace.
  526.  
  527.      A click on a non-empty line of the Context view takes you, as usual, immediately into the full Text view of your dataspace.  The text displayed is complete and is not restricted by your choice of subspace.
  528.  
  529. ΓÇóMulti-dataspace browsing:
  530.  
  531.      If your information comes in distinct categories and you don't wish to simply merge all of it into a single overarching dataspace, you may want to open multiple dataspaces for simultaneous browsing.  TEX lets you do that easily.  All of the TEX database browsing services are contained on a single card.  So, to open multiple dataspaces, just copy that card and then paste it (as many times as you like) into the TEX stack!  (Be sure to do it when no dataspaces are open, or you may confuse the system.)  You may also want to add buttons such as ΓÇ£NextΓÇ¥ or ΓÇ£PrevΓÇ¥ and put distinguishing features on each of your browsing cards, to avoid confusion.
  532.  
  533.      The Macintosh operating system imposes a limit on how many dataspaces you can open at one time.  Each open dataspace uses three file paths (to the text, keys, and pointers files), and depending on the configuration and version of the system that you are using the limit on available dataspaces may vary.  I have browsed six dataspaces simultaneously, but have not tested the limits of this feature thoroughly and would appreciate any reports of your own experiences.  (You should probably let TEX close all open dataspaces before trying to build new index files, as parts of that operation require opening up to ten file paths.  Be careful about appending files, calling up desk accessories, or doing other I/O-intensive tasks while browsing many dataspaces at once!)
  534.  
  535. ΓÇóLeaving with open dataspaces:
  536.  
  537.      When you leave the TEX stack, as mentioned earlier you are asked, ΓÇ£Close any open dataspace(s)?ΓÇ¥.  In general, you should answer ΓÇ£YesΓÇ¥, and allow TEX to close the links to files and release the subspaces you have created.  (You can close a dataspace by hand simply by clicking on the "Open Dataspace" button and then choosing "Cancel" instead of a file name.)
  538.  
  539.      But if you just want to go within HyperCard to another stack, and then return to TEX for further browsing, it's usually all right to keep the files and subspaces open for activity.  You may even be able to quit HyperCard and then return to an open dataspace, although that's getting dangerous.  Any subspace that you may have defined will be invalid, and deadly consequences are possible.  You also won't be able to discard or otherwise manipulate an open dataspace file while outside of TEX.
  540.  
  541.      On the other hand, if you are truly just going to leave TEX for a few moments and then return to continue work, it's convenient to leave dataspaces open.  And if you plan to shut down operations and turn off your Macintosh immediately, it also isn't necessary to take the time to close all dataspaces; the operating system will do that for you.  But in general, it is safest to let TEX close any open dataspaces for you whenever you leave the stack.
  542.  
  543.  
  544. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöIN CASE OF TROUBLEΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö
  545.  
  546.      TEX is designed to keep you out of trouble, but sometimes the unexpected happens.  If you get stuck, particularly with a message about a ΓÇ£...fatal error...ΓÇ¥ of some sort, you should probably quit from HyperCard, reboot your Macintosh, and then look around.  Did you run out of disk space while building an index?  Did you try to reindex a changed text file without first discarding the old indices?  Do you have anything unusual about your system that might have caused a bad interaction with TEX?
  547.  
  548.      After a bad crash, especially while index-building, you may be left with a large number of temporary index files on your disk, with names such as ΓÇ£z0k0ΓÇ¥, ΓÇ£z2p17ΓÇ¥, etc.  It may take the Finder a long time to even open the folder where your index-building was taking place.  Be patient, and trash all such files before trying to build any further indices.  (You can use the TEX ΓÇ£Delete FilesΓÇ¥ button to get rid of them if you like.)  Excluding the two buttons labeled ΓÇ£Delete FilesΓÇ¥ and ΓÇ£Append FilesΓÇ¥, no TEX operations should ever change the contents of any of your files.  Let me know at once of any apparent exceptions, please!
  549.  
  550.      If you get a beep and a warning of a non-fatal error, you can probably continue working, but think first.  Did you try to use an advanced feature without reading the instructions above?  (That's OK, as long as you don't make a mistake!)  Did you attempt to open a dataspace text file which hasn't been indexed, or which has been changed since indexing last took place?  Did you try to build an index to a text file which already had old keys and pointers files on disk?  (You will find some new index files with temporary names such as ΓÇ£z3k0ΓÇ¥ and ΓÇ£z3p0ΓÇ¥; throw away the old .k and .p files and rename the new ones appropriately.)  Did you scroll off one end of the dataspace?  Were you pushing the envelope in some other direction?  TEX attempts to catch any errors you may make, but I would greatly appreciate being notified of any other ΓÇ£safety netsΓÇ¥ which I should incorporate in the next version of the system.
  551.  
  552.  
  553. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöSOME TECHNICAL NOTESΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö
  554.  
  555.  
  556.      Sorry ΓÇö I've run out of room in this HyperCard field to go into the gory details of how TEX works!  For more information, see the instructions for ordering a disk with all the C source code itself.  The C routines are well commented and not too hard to understand, and they provide the best documentation of what is going on.  Or click the button ΓÇ£Technical NotesΓÇ¥ to get a brief review of the TEX XFCN calling conventions and parameters, and the return values that they send back to HyperTalk.
  557.  
  558.  
  559. ΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöFINAL REMARKSΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇöΓÇö
  560.  
  561.      I've enjoyed developing and using TEX tremendously.  Please pass this stack along to your friends, please have fun with it, please send in your license fees, and please let me know if you enjoy it and if you make any discoveries or achieve any intellectual triumphs that TEX deserves credit for helping with.  Read the ΓÇ£Author's RemarksΓÇ¥, and share your ideas with the world.
  562.  
  563.      ^z  ΓÇö 19880904
  564.  
  565.  
  566.  
  567. -- part contents for card part 107
  568. ----- text -----
  569.                                                                                                    ┬½click on this field to dismiss it┬╗
  570. Some brief, impassioned, editorial remarks by the author:
  571.      What you have in front of you is something precious.  It represents years of my work, and includes ideas and algorithms from countless other people.  A commercial product like this would cost hundreds or even thousands of dollars per copy.  You get it for a very low fee ΓÇö but with your acceptance comes an obligation:
  572.      Take advantage of this stack!  Use it to index and browse your collections of information.  Discover new things; share those discoveries with the world; make your life and the lives of others better.  And please let me know how TEX has aided you, and what new features you would like to see included in the system.  
  573.      If you're a software developer, take my algorithms and data structures and build upon them ΓÇö add auxiliary indices or embedded tags to hold information about documents, zones, paragraphs, sentences, whatever!  Extend the user interface that I've begun to implement.  Figure out alternative ways to interact with the data ΓÇö cross-correlate information, recognize natural language patterns, sort and search in different dimensions, browse multiple dataspaces, retrieve graphics, include annotations or hypertextual links, etc.  Fold in ideas that you've seen elsewhere.  Most importantly, leave hooks so that other developers can build upon your work.  And please let me know about your extensions.
  574.      I feel strongly that closed, proprietary index structures are a big mistake.  Software tied to such an index is fundamentally weak ΓÇö it can't be extended or adapted to new needs except by the permission of the owner, and it can't take full advantage or new ideas or technologies.
  575.      My TEX system is completely open ΓÇö there are no secrets!  If you build upon it, both you and the users of your software will profit far more than if you try to make a short-term killing in the market.
  576.      Excessive selfishness by software developers doesn't pay.  Think of yourself as a scholar, a scientist ΓÇö publish your work, share it with the world, and go into intellectual collaboration with your colleagues.  Join the community of researchers.  You'll get more accomplished, you'll help more people, and you won't have to feel guilty about stealing ideas ... you gain the right to use those ideas by sharing yours on an equal basis.
  577.      Do something you can be proud of.  Add your spark "...to the smouldering fire of Man's emergence from his savage past."  (from a poem by Richard L. Ropiquet, ca. 1964)                                         ^z ΓÇö 19880904
  578.  
  579. -- part contents for card part 108
  580. ----- text -----
  581. graphical design by -andReas-> Vichr
  582.  
  583. -- part contents for card part 110
  584. ----- text -----
  585.               --------------Greetings, program!--------------------
  586.  
  587.      Welcome to the technical documentation for TEX, short form!  (It has to be in this ugly font, or it wouldn't be technical.)  To get the full story of TEX, you really have to read my C code and comments thereto.  See the Help field to find out how to order the source code and other programs, if you don't find what you need on a bulletin board, network, or from a users group.  (In brief, send me $15 if you're not already a registered TEX individual/family user, $5 if you are, $5+$40*N if you are writing for a corporation using N copies of TEX simultaneously and haven't paid the license fee yet.  And please read my Author's Remarks about sharing software and ideas!)
  588.  
  589.      This information is copyright ┬⌐ 1988 by Mark ^Zimmermann - all rights reserved.  It is subject to change without notice, as future versions of TEX evolve.  I am not responsible for errors or omissions herein; see the Help field for further legalistic disclaimers.
  590.  
  591.      This technical information field is full of various excerpts from the documentation/comments of some of my C programs.  It may be of particular interest to those who would like to customize TEX or who want to take advantage of TEX's external functions for use in other stacks.
  592.  
  593.      If you want to work on TEX and improve it at the HyperTalk scripting level, begin by looking at all the scripts and the names and contents of the various invisible fields.  Those fields correspond directly to the XFCN parameters (discussed below) which control how information is retrieved from a dataspace.  Thus, if you want to change the amount of text fetched in a single chunk, you simply need put a new value into the field textChunkSize.  If you want to make the index windows show a different number of lines, change the contents of field indexLines.  To change the threshhold for skipping lines in the context view of a subspace, or to change the maximum sample number of words counted in an index subspace view before switching to a percentage estimate, alter the values in fields maxContextLinesSkipped or maxIndexSampleCount respectively.
  594.  
  595.      Many changes and customizations to TEX are quite easy to make.  Be creative, and please let me know what variations you find most useful!  Write me at the address given in the Help field (the same place that you send your license fee to - you have sent in your license fee, haven't you?), or send me electronic mail.  Many thanks - your suggestions will help make the next version of TEX better for everybody.
  596.  
  597.      TEX uses four significant XFCNS:  one to build indices, one to append or delete files, one to open and close dataspace files, and one very important XFCN which does all the real work of moving around and retrieving Index, Context, and Text views from dataspaces.  In that order, they are:
  598.  
  599.  
  600. indexTEXfile():
  601. /*
  602.  * call the XFCN as 'indexTEXfile()' ... it returns with nothing
  603.  * if all goes well, and an error message (if possible) otherwise...
  604.  */
  605.  
  606.  
  607. appendDeleteFiles():
  608. /*
  609.  * Call this XFCN as "appendDeleteFiles (cmd)".  If cmd begins with the
  610.  * letter 'A', then a standard files dialog will offer a list of TEXT
  611.  * files; if one is selected, then the offer will be repeated and
  612.  * subsequent selections will be appended to the end of the first
  613.  * one.  If cmd begins with the letter 'D', then files selected from
  614.  * the std files dialog (which shows all files now, now just TEXT files)
  615.  * will be irreversably (probably? barring low-level magic) deleted.
  616.  */
  617.  
  618.  
  619. openCloseTEXFiles():
  620. /*
  621.  * Call this XFCN as 'openCloseTEXfiles([optional list of numbers here])'.
  622.  *
  623.  * If the XFCN is called with no arguments, it puts up the standard files
  624.  * dialog box and gives back in return the file refNums for the text
  625.  * (document/dataspace) file, *.k, and *.p files, on one line, in
  626.  * that order, separated by spaces.  Note that the *.k and *.p files
  627.  * must be in the same folder as the master dataspace file; an earlier
  628.  * version of this XFCN tried to allow them to be elsewhere (or to
  629.  * have different names), but it was too complex and didn't seem to be
  630.  * appreciated by the users!
  631.  *
  632.  * If the XFCN is passed any numerical parameters, it attempts to
  633.  * close them (assuming they are file refNums) and doesn't try to
  634.  * open anything....
  635.  *
  636.  * If an error while opening a file seems to occur, the XFCN attempts
  637.  * to close all files that have already been opened, and returns with
  638.  * an error msg instead of the three file refNums.  No error checking
  639.  * is done on closing files, since there's not much that one could
  640.  * do about such an error in any case....
  641.  */
  642.  
  643.  
  644. zbrowser():
  645. /* the following parameter lists govern what zbrowser() does...
  646.  *
  647.  * ("CONTEXT", instanceNum, contextLines, targetContextLine,
  648.  *  contextLineLength, contextWordOffset, maxContextLinesSkipped,
  649.  *  ptrFileRefNum, textFileRefNum, subspaceHandle)
  650.  * --returns with contextLines of display followed by contextLines
  651.  * of instanceNum-textPtr pairs, with context instance instanceNum
  652.  * on line targetContextLine...
  653.  *
  654.  * ("EMPTYSUBSPACE", subspaceHandle)
  655.  * --returns quietly with nothing if it successfully sets all bits
  656.  * in the subspace flag array to zero; beeps and gives an error msg
  657.  * if it fails somehow...
  658.  *
  659.  * ("FILLSUBSPACE", subspaceHandle)
  660.  * --returns quietly with nothing if it successfully sets all bits
  661.  * in the subspace flag array to one; beeps and gives an error msg
  662.  * if failure...
  663.  *
  664.  * ("INDEX", wordNum, indexLines, maxIndexSampleCount, indexCountWidth,
  665.  *  indexKeyWidth, keyFileRefNum, ptrFileRefNum, subspaceHandle)
  666.  * --returns with indexLines of index window display, followed by
  667.  * indexLines of instanceNums.  The index lines are:
  668.  * indexCountWidth columns of occurrence count info (right-justified),
  669.  * a blank column, and indexKeyWidth columns of keyWord (in all
  670.  * caps, left-justified).  Demand that indexCountWidth be at least
  671.  * 5, to allow for subindex count display, and that indexKeyWidth
  672.  * be in the range 1 through KEY_LENGTH = 28 ...
  673.  *
  674.  * ("LOCATE", targetString, keyFileRefNum)
  675.  * --returns wordNum for the targetString if it is found in the
  676.  * key file; otherwise returns wordNum for the word alphabetically
  677.  * preceding targetString followed by "{targetString not found!}"
  678.  * on the second line of the answer...
  679.  *
  680.  * ("NEWSUBSPACE", textFileRefNum)
  681.  * --returns subspaceHandle for a new subspace that it creates, big
  682.  * enough to do subspace browsing -- but does NOT initialize that
  683.  * subspace or check to see whether another subspace already
  684.  * exists.  Beeps and gives error msg if it fails...
  685.  *
  686.  * ("RELEASESUBSPACE", subspaceHandle)
  687.  * --returns quietly with nothing if successful in releasing the
  688.  * subspaceHandle, or noisily with an error message if it fails...
  689.  *
  690.  * ("SETSUBSPACEBITS", wordNum, neighborhoodSize, setOrClear,
  691.  *  keyFileRefNum, ptrFileRefNum, subspaceHandle)
  692.  * --returns quietly with nothing if it is successful in setting or
  693.  * clearing (depending on setOrClear's value, 0 or non-0) the
  694.  * bits in the subspace flag array in the neighborhood of the
  695.  * chosen word(s); gives an error msg if there was a problem.
  696.  * neighborhoodSize is in characters and is used to determine
  697.  * how many bits to set/clear on each side of the instances...
  698.  *
  699.  * ("TEXT", textPtr, textChunkSize, textOffset, textFileRefNum)
  700.  * --returns with (if possible; see below)
  701.  * textChunkSize bytes of text from the text file,
  702.  * starting at byte number textPtr-textOffset+1 and ending
  703.  * just before byte number textPtr-textOffset+textChunkSize+1.
  704.  * (The '+1' is to match up with HyperCard's 1-based counting
  705.  * convention, rather than the 0-based C convention!!)
  706.  * If the file isn't big enough or if textPtr is too near the
  707.  * beginning or end of the file, cut off the retrieved text
  708.  * at that boundary and insert the words {beginning of dataspace}
  709.  * or {end of dataspace}.  ***Do no filtering of the text!***
  710.  * (Thus, there may be strangenesses if the 'text' file has
  711.  * '\0' or other nasty characters in it -- sorry about that!)
  712.  * Restrict textChunkSize to <32000 bytes.  After the text, on
  713.  * a separate line, return three numbers:  the byte number of
  714.  * the first char returned relative to the beginning of the text
  715.  * file, the actual offset within the characters returned
  716.  * of the originally-requested textPtr, and the byte number
  717.  * of the character after the last char returned relative to
  718.  * the beginning of the text file.
  719.  */
  720.  
  721.  
  722.  - ^z - 19880904
  723.  
  724.